#ifndef __PID_H__
#define __PID_H__

#include <stdint.h>
#include <stdbool.h> 

// PID控制器结构体
typedef struct
{
    float Kp;            // 比例系数
    float Ki;            // 积分系数
    float Kd;            // 微分系数
    float setpoint;      // 目标值
    float integral;      // 积分项
    float prev_error;    // 上一次误差
    float prev_measurement;// 上一次测量值
    float min_output;    // 输出最小值
    float max_output;    // 输出最大值
    bool prev_measurement_initialized; // 是否已初始化
}WHT_PID_t;

typedef struct
{
    /* 初始化 */
    void (*init)(WHT_PID_t *pid, float kp, float ki, float kd, float min_output, float max_output);
    /* 设置目标值 */
    void (*set_point)(WHT_PID_t *pid, float setpoint);
    /* 清除积分 */
    void (*clr_integral)(WHT_PID_t *pid);
    /* 设置PID */
    void (*set_kp_ki_kd)(WHT_PID_t *pid, float kp, float ki, float kd);
    /* 计算 */
    float (*compute)(WHT_PID_t *pid, float current_value, float dt);
}WHT_PID_OPS_t;

extern const WHT_PID_OPS_t WHT_PID_OPS;

#endif /* __PID_H__ */
